<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>this</title>
  </head>
  <body>
    <script>
      //  //T1.
      // function fun() {
      //   console.log(this.s);
      // }
      // var obj = {
      //   s: 1,
      //   f: fun,
      // };
      // var s = 2;
      // obj.f(); //obj调用，所以打印1

      // //T2.
      // function fun() {
      //   console.log(this.s);
      //   var obj = {
      //     s: 1,
      //     f: fun,
      //   };
      // }
      // var s = 2;
      // fun(); //最后是window调用，所以打印的值为2

      // //T3.
      // var A = {
      //   name: "jmq",
      //   f: function () {
      //     console.log(this.name);
      //   },
      // };
      // var B = {
      //   name: "syc",
      // };
      // B.f = A.f;
      // A.f(); //A最后调用，所以打印jmg
      // B.f(); //A.f赋值给了B.f，所以打印syc

      // //T4.
      // function fo() {
      //   console.log(this.a);
      // }
      // var o1 = {
      //   a: 3,
      // };
      // var o2 = {
      //   a: 6,
      // };
      // var a = 9;
      // o1.f = fo;
      // console.log(o1);
      // o2.f = o1.f;
      // o1.f(); // 输出什么？  3
      // o2.f(); // 输出什么？  6

      ////T5.
      // function foo() {
      //   console.log(this.a);
      // }
      // var obj2 = {
      //   a: 2,
      //   fn: foo,
      // };
      // var obj1 = {
      //   a: 1,
      //   o1: obj2,
      // };
      // obj1.o1.fn(); // 输出的是啥？  最后调用的是o1,所以打印的值为2

      // //T6.
      // var a = 10;
      // var obj = {
      //   a: 120,
      //   method: function () {
      //     var bar = function () {
      //       console.log(this.a); // 输出什么？   匿名函数的this指向window，所以打印10
      //     };
      //     bar();

      //     return this.a;  // 输出什么？   obj调用，所以打印120
      //   },
      // };
      // console.log(obj.method());

      //T7.
      // var fullName = "language";
      // var obj = {
      //   fullName: "javascript",
      //   prop: {
      //     getFullName: function () {
      //       return this.fullName;
      //     },
      //   },
      // };
      // console.log(obj.prop.getFullName()); // 这里输出什么？   prop调用，所以输出undefined
      // var test = obj.prop.getFullName;
      // console.log(test()); // 这里输出什么      window调用，输出language

      // //T8.
      // function fn() {
      //   console.log(this);
      // }
      // setInterval(fn, 1000); // 这里打印啥？    指向window，所以打印window

      // //T9.
      // var k = {
      //   a: 1,
      //   sing: function () {
      //     console.log(this);
      //   },
      // };
      // setTimeout("k.sing()", 1000); // 这里打印的是啥？    指向k，所以打印k

      // //T10.
      // var value = 8;
      // var obj = {
      //   value: 10,
      //   fn: () => {
      //     console.log(this.value); //打印什么      箭头函数没有this，往上找，所以打印8
      //   },
      // };
      // obj.fn();
    </script>
  </body>
</html>
